package com.xuecheng.api.client.fallback;

import com.xuecheng.api.client.MediaClient;
import com.xuecheng.api.dto.MediaFiles;
import com.xuecheng.api.dto.UploadFileResultDTO;
import com.xuecheng.base.result.RestResponse;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author 勾新杰
 * @version 1.0
 * @description: 媒资管理服务降级处理
 * @date 2025/2/16 14:30
 */
@Slf4j
public class MediaClientFallBackFactory implements FallbackFactory<MediaClient> {

    /**
     * 降级处理
     *
     * @param throwable 抛出的异常
     * @return MediaClient
     */
    @Override
    public MediaClient create(Throwable throwable) {
        return new MediaClient() {

            /**
             * 根据文件id查询文件信息
             *
             * @param mediaId 文件id
             * @return 文件信息
             */
            @Override
            public MediaFiles queryMediaById(String mediaId) {
                log.error("远程调用媒资管理服务查询媒资信息失败:{}", throwable.getMessage());
                return null;
            }

            /**
             * 上传文件
             *
             * @param file       文件
             * @param courseId   课程id
             * @return 上传结果
             */
            @Override
            public UploadFileResultDTO upload(MultipartFile file, Long courseId) {
                log.error("远程调用媒资管理服务上传文件失败:{}", throwable.getMessage());
                return null;
            }

            /**
             * 删除文件
             *
             * @param id 文件id
             * @return 删除结果
             */
            @Override
            public RestResponse<Boolean> deleteCourseHtml(Long id) {
                log.error("远程调用媒资管理服务删除文件失败:{}", throwable.getMessage());
                return RestResponse.error(false, "删除文件失败");
            }
        };
    }
}
